home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / 226_01.zip / WORKUP0.C < prev    next >
Text File  |  1993-04-21  |  5KB  |  130 lines

  1. /*     HEADER:CUG 226;
  2.        TITLE:"ART-CEE";
  3.        VERSION:1.4;
  4.        DESCRIPTION:"Small artificial intelligence inference engine.
  5.  
  6.             ART-CEE is a rule-based general purpose driver capable of working
  7.             with heirarchical and/or propositional information.";
  8.        KEYWORDS:artificial intelligence, inference engines, database;
  9.        SYSTEM:MS-DOS;
  10.        FILENAME:WORKUP0.C;
  11.        SEE-ALSO:WORKUP2.C, WORKUP3.C, WORKUP4.C, MANUAL.TXT, WORKUP0.H,
  12.             WORKUP1.H, HELP1.AIH, HELP2.AIH, HELP3.AIH, HELP4.AIH, ART-CEE.COM;
  13.        AUTHOR:Dan Cheatham;
  14.        COMPILER:MIX-C;
  15.    */
  16.  
  17.          /*  art-cee artificial intelligence inference engine     */
  18.          /*                                                       */
  19.          /*  file:  workup0.c    --  parsing subroutines          */
  20.          /*                          predicate parse              */
  21. #include "workup0.h"
  22. #include "workup1.h"
  23.  
  24. mainin()
  25.     {    char extr1[81], extr2[81], extr3[81]; int x3;
  26.          if (menu_sw == 'Y')
  27.              showmenu();
  28.          printf("\nEnter rule, query or command.\n");
  29.          gets(indff);
  30.  
  31.          x1 = strlen(indff); x2 = 0;
  32.  
  33.          if (x1 > 2)
  34.          { x2 = x1 - 1;
  35.            strsplit(indff,extr1,extr2,x1,x1-1);
  36.             if (x1 > 7)
  37.                 x2 = parsesub(indff,"IF THE ",extr1,x1,7);
  38.             if (x2 == 0 && x1 > 6)
  39.                 x2 = parsesub(indff,"IF AN ",extr1,x1,6);
  40.             if (x2 == 0 && x1 > 5)
  41.                 x2 = parsesub(indff,"IF A ",extr1,x1,5);
  42.             if (x2 == 0 && x1 > 3)
  43.                 x2 = parsesub(indff,"IF ",extr1,x1,3);
  44.             if (x2 == 0 && x1 > 11)
  45.                 x2 = 2 * parsesub(indff,"WHO IS THE ",extr1,x1,11);
  46.             if (x2 == 0 && x1 > 10)
  47.                 x2 = 2 * parsesub(indff,"WHO IS AN ",extr1,x1,10);
  48.             if (x2 == 0 && x1 > 9)
  49.                 x2 = 2 * parsesub(indff,"WHO IS A ",extr1,x1,9);
  50.             if (x2 == 0 && x1 > 7)
  51.                 x2 = 2 * parsesub(indff,"WHO IS ",extr1,x1,7);
  52.             if (x2 == 0 && x1 > 12)
  53.                 x2 = 3 * parsesub(indff,"WHAT IS THE ",extr1,x1,12);
  54.             if (x2 == 0 && x1 > 11)
  55.                 x2 = 3 * parsesub(indff,"WHAT IS AN ",extr1,x1,11);
  56.             if (x2 == 0 && x1 > 10)
  57.                 x2 = 3 * parsesub(indff,"WHAT IS A ",extr1,x1,10);
  58.             if (x2 == 0 && x1 > 7)
  59.                 x2 = 3 * parsesub(indff,"WHO IS ",extr1,x1,7);
  60.             if (x2 == 0 && x1 > 8)
  61.                 x2 = 3 * parsesub(indff,"WHAT IS ",extr1,x1,8);
  62.             if (x2 == 0 && x1 > 4)
  63.                 x2 = 2 * parsesub(indff,"WHO ",extr1,x1,4);
  64.             if (x2 == 0 && x1 > 5)
  65.                 x2 = 3 * parsesub(indff,"WHAT ",extr1,x1,5);
  66.             if (x2 == 0 && x1 > 13)
  67.                 x2 = 5 * parsesub(indff,"DESCRIBE THE ",extr1,x1,13);
  68.             if (x2 == 0 && x2 > 12)
  69.                 x2 = 5 * parsesub(indff,"DESCRIBE AN ",extr1,x1,12);
  70.             if (x2 == 0 && x2 > 11)
  71.                 x2 = 5 * parsesub(indff,"DESCRIBE A ",extr1,x1,11);
  72.             if (x2 == 0 && x1 > 9)
  73.                 x2 = 5 * parsesub(indff,"DESCRIBE ",extr1,x1,9);
  74.  
  75.             if (strcmp(extr2,"?") == 0)
  76.                { x2 = x2 * -1;
  77.                x3 = strlen(extr1) - 1;
  78.                strsplit(extr1,extr2,extr3,strlen(extr1),x3);
  79.                strcpy(extr1,extr2);}
  80.             if (x2 != 0)
  81.                strcpy(indff,extr1);}
  82. }
  83.  
  84. parsesub(dd,dd2,dd3,dn1,dn2)
  85.     char *dd[ ], *dd2[ ], *dd3[ ]; int dn1, dn2;
  86.      {  int sd6; char sd7[81], sd8[81];
  87.         strsplit(dd,sd7,sd8,dn1,dn2);
  88.         strcpy(dd3,sd8);
  89.         if (strcmp(sd7,dd2) == 0)
  90.             return(1);
  91.         else
  92.             return(0);
  93. }
  94.  
  95. strsplit(sl1,sl2,sl3,sl5,sl4)
  96.      short int *sl1, *sl2, *sl3; int sl4, sl5;
  97.      { int sn1, sn2;
  98.        sn2 = sl5;
  99.        sn1 = 0;
  100.        while(sn1++ < sl4)
  101.          { if (*sl1 > 96 && *sl1 < 123)
  102.              *sl1 = *sl1 - 32;
  103.           *sl2++ = *sl1++;}
  104.        *sl2++ = 0;
  105.        sn1 = sl4 - 2;
  106.        while(sn1++ < sn2)
  107.           { if (*sl1 > 96 && *sl1 < 123)
  108.               *sl1 = *sl1 - 32;
  109.             *sl3++ = *sl1++;}
  110.        return strsplit;
  111. }
  112.   
  113. parsepred(dd1,dd2,dd3,dd4,dd5)
  114.     char *dd1[ ], *dd2[ ], *dd3[ ]; int dd4, dd5;
  115.    { short int pp1, pp2, pp3, pp4;
  116.      char pp6[81], pp7[81], pp8[81], pp9[81];
  117.      pp4 = strlen(dd1) - 6;
  118.      pp1 = 0; pp2 = 1;
  119.      while(pp1 == 0 && pp2 < pp4)
  120.         { strsplit(dd1,pp6,pp7,dd4,pp2);
  121.           pp3 = parsesub(pp7," THEN ",pp8,strlen(pp7),6);
  122.           if (pp3 != 0)
  123.              { strcpy(dd1,pp6);
  124.                strcpy(dd3,pp8);
  125.                pp1 = 1;} 
  126.           pp2++; }
  127.         return(pp1);
  128. }
  129.  
  130.